package org.jsola.hr.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.jsola.core.dto.BaseDTO;

import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;

import static org.jsola.hr.example.EmpChangesExample.*;

/**
 * @author zhr
 */
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "新增【员工人事变动记录】的参数")
@Data
public class EmpChangesAddDTO extends BaseDTO {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(notes = "处理类型，1待调岗2调岗")
    private Integer updateType;

    @ApiModelProperty(notes = "员工ID数组")
    private String[] empIdS;

    @ApiModelProperty(notes = N_EMP_ID, example = E_EMP_ID)
    @Length(max = 32, message = M_EMP_ID_MAX)
    private String empId;

    @ApiModelProperty(notes = N_APPRO_FLOW_ID, example = E_APPRO_FLOW_ID)
    @Length(max = 32, message = M_APPRO_FLOW_ID_MAX)
    private String approFlowId;

    @ApiModelProperty(notes = N_CHANGE_TYPE, example = E_CHANGE_TYPE)
    private Integer changeType;

    @ApiModelProperty(notes = N_PRE_CODE, example = E_PRE_CODE)
    @Length(max = 255, message = M_PRE_CODE_MAX)
    private String preCode;

    @ApiModelProperty(notes = N_CURRENT_CODE, example = E_CURRENT_CODE)
    @Length(max = 255, message = M_CURRENT_CODE_MAX)
    private String currentCode;

    @ApiModelProperty(notes = N_FORMALLY_DATE, example = E_FORMALLY_DATE)
    private Date formallyDate;

    @ApiModelProperty(notes = N_PROBATION_DATE, example = E_PROBATION_DATE)
    private Date probationDate;

    @ApiModelProperty(notes = N_REGULAR_DATE, example = E_REGULAR_DATE)
    private Date regularDate;

    @ApiModelProperty(notes = N_REGULAR_EVALUATION, example = E_REGULAR_EVALUATION)
    @Length(max = 2000, message = M_REGULAR_EVALUATION_MAX)
    private String regularEvaluation;

    @ApiModelProperty(notes = N_REGULAR_ATTACMENT, example = E_REGULAR_ATTACMENT)
    @Length(max = 32, message = M_REGULAR_ATTACMENT_MAX)
    private String regularAttacment;

    @ApiModelProperty(notes = N_ADJUSTMENT_DATE, example = E_ADJUSTMENT_DATE)
    private Date adjustmentDate;

    @ApiModelProperty(notes = N_ADJUSTMENT_REASON, example = E_ADJUSTMENT_REASON)
    @Length(max = 255, message = M_ADJUSTMENT_REASON_MAX)
    private String adjustmentReason;

    @ApiModelProperty(notes = N_ADJUSTMENT_ATTACHMENT, example = E_ADJUSTMENT_ATTACHMENT)
    @Length(max = 32, message = M_ADJUSTMENT_ATTACHMENT_MAX)
    private String adjustmentAttachment;

    @ApiModelProperty(notes = N_PRE_DEP, example = E_PRE_DEP)
    @Length(max = 10000, message = M_PRE_DEP_MAX)
    private String preDep;

    @ApiModelProperty(notes = N_PRE_POSITION, example = E_PRE_POSITION)
    @Length(max = 10000, message = M_PRE_POSITION_MAX)
    private String prePosition;

    @ApiModelProperty(notes = N_PRE_LEVEL, example = E_PRE_LEVEL)
    private Integer preLevel;

    @ApiModelProperty(notes = N_PRE_SUPERVISOR, example = E_PRE_SUPERVISOR)
    @Length(max = 255, message = M_PRE_SUPERVISOR_MAX)
    private String preSupervisor;

    @ApiModelProperty(notes = N_PRE_MANAGER_FORM, example = E_PRE_MANAGER_FORM)
    private Integer preManagerForm;

    @ApiModelProperty(notes = N_PRE_WORK_CITY_ID, example = E_PRE_WORK_CITY_ID)
    @Length(max = 255, message = M_PRE_WORK_CITY_ID_MAX)
    private String preWorkCityId;

    @ApiModelProperty(notes = N_CURRENT_DEP, example = E_CURRENT_DEP)
    @Length(max = 255, message = M_CURRENT_DEP_MAX)
    private String currentDep;

    @ApiModelProperty(notes = N_COMPANY_ID, example = E_COMPANY_ID, required = true)
    @NotNull(message = M_COMPANY_ID_NOT_NULL)
    @Length(max = 32, message = M_COMPANY_ID_MAX)
    private String companyId;

    @ApiModelProperty(notes = N_CURRENT_POSITION, example = E_CURRENT_POSITION)
    @Length(max = 255, message = M_CURRENT_POSITION_MAX)
    private String currentPosition;

    @ApiModelProperty(notes = N_CURRENT_LEVEL, example = E_CURRENT_LEVEL)
    private Integer currentLevel;

    @ApiModelProperty(notes = N_CURRENT_SUPERVISOR, example = E_CURRENT_SUPERVISOR)
    @Length(max = 255, message = M_CURRENT_SUPERVISOR_MAX)
    private String currentSupervisor;

    @ApiModelProperty(notes = N_CURRENT_MANAGER_FORM, example = E_CURRENT_MANAGER_FORM)
    private Integer currentManagerForm;

    @ApiModelProperty(notes = N_CURRENT_WORK_CITY_ID, example = E_CURRENT_WORK_CITY_ID)
    @Length(max = 255, message = M_CURRENT_WORK_CITY_ID_MAX)
    private String currentWorkCityId;

    @ApiModelProperty(notes = N_CURRENT_WORK_CITY, example = E_CURRENT_WORK_CITY)
    @Length(max = 255)
    private String currentWorkCity;

    @ApiModelProperty(notes = N_QUIT_TYPE, example = E_QUIT_TYPE)
    private Integer quitType;

    @ApiModelProperty(notes = N_QUIT_DATE, example = E_QUIT_DATE)
    private Date quitDate;

    @ApiModelProperty(notes = N_PRE_QUIT_DATE, example = E_PRE_QUIT_DATE)
    private Date preQuitDate;

    @ApiModelProperty(notes = N_HANDLE_QUIT_DATE, example = E_HANDLE_QUIT_DATE)
    private Date handleQuitDate;

    @ApiModelProperty(notes = N_PERSONAL_REASON, example = E_PERSONAL_REASON)
    private Integer personalReason;

    @ApiModelProperty(notes = N_COMPANY_REASON, example = E_COMPANY_REASON)
    private Integer companyReason;

    @ApiModelProperty(notes = N_QUIT_REASON, example = E_QUIT_REASON)
    @Length(max = 2000, message = M_QUIT_REASON_MAX)
    private String quitReason;

    @ApiModelProperty(notes = N_QUIT_REMARKS, example = E_QUIT_REMARKS)
    @Length(max = 2000, message = M_QUIT_REMARKS_MAX)
    private String quitRemarks;

    @ApiModelProperty(notes = N_APPLY_QUIT_REASON, example = E_APPLY_QUIT_REASON)
    @Length(max = 2000, message = M_APPLY_QUIT_REASON_MAX)
    private String applyQuitReason;

    @ApiModelProperty(notes = N_COMPENSATION, example = E_COMPENSATION)
    private Integer compensation;

    @ApiModelProperty(notes = N_PAYMENT_LIEU_NOTICE, example = E_PAYMENT_LIEU_NOTICE)
    private Integer paymentLieuNotice;

    @ApiModelProperty(notes = N_SS_ATTRITION_MONTH, example = E_SS_ATTRITION_MONTH)
    private Date ssAttritionMonth;

    @ApiModelProperty(notes = N_PF_ATTRITION_MONTH, example = E_PF_ATTRITION_MONTH)
    private Date pfAttritionMonth;

    @ApiModelProperty(notes = N_SURPLUS_YEAR_HOLIDAY, example = E_SURPLUS_YEAR_HOLIDAY)
    private Integer surplusYearHoliday;

    @ApiModelProperty(notes = N_SURPLUS_BREAK_OFF, example = E_SURPLUS_BREAK_OFF)
    private Integer surplusBreakOff;

    @ApiModelProperty(notes = N_DIRECTLY_UNDER_NUMBER, example = E_DIRECTLY_UNDER_NUMBER)
    private Integer directlyUnderNumber;

    /**
     * 状态(0:初始;1:通过;2:拒绝)
     */
    private Integer changeStatus;


    @ApiModelProperty(notes = "要调入的部门List")
    private List<String> currentDepIdList;

    @ApiModelProperty(notes = "要调入的岗位List")
    private List<String> currentPositionIdList;
}

